return race;
}
-static xen_pfn_t *xc_map_m2p(int xc_handle,
+xen_pfn_t *xc_map_m2p(int xc_handle,
unsigned long max_mfn,
- int prot)
+ int prot,
+ unsigned long *mfn0)
{
struct xen_machphys_mfn_list xmml;
privcmd_mmap_entry_t *entries;
goto err2;
}
- m2p_mfn0 = entries[0].mfn;
+ if (mfn0)
+ *mfn0 = entries[0].mfn;
err2:
free(entries);
}
/* Setup the mfn_to_pfn table mapping */
- if ( !(live_m2p = xc_map_m2p(xc_handle, max_mfn, PROT_READ)) )
+ if ( !(live_m2p = xc_map_m2p(xc_handle, max_mfn, PROT_READ, &m2p_mfn0)) )
{
ERROR("Failed to map live M2P table");
goto out;
int xc_query_page_offline_status(int xc, unsigned long start,
unsigned long end, uint32_t *status);
+
+/**
+ * This function map m2p table
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm max_mfn the max pfn
+ * @parm prot the flags to map, such as read/write etc
+ * @parm mfn0 return the first mfn, can be NULL
+ * @return mapped m2p table on success, NULL on failure
+ */
+xen_pfn_t *xc_map_m2p(int xc_handle,
+ unsigned long max_mfn,
+ int prot,
+ unsigned long *mfn0);
#endif /* XENGUEST_H */